package com.gongjian.database.service;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import com.gongjian.database.entity.User;
import com.gongjian.utile.CodeEntity;
import com.gongjian.utile.Crud;
import com.gongjian.utile.Https;
import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.PageHelper;

import org.apache.ibatis.session.SqlSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
 * @Author: TanLiLin
 * @Date: 2019/3/21 17:16
 * @Version 1.0
 */
import java.util.List;
@Service
public class UserService {

    @Autowired
    SqlSession sqlSession;
    /**
     * 微信小程序登录接口
     * @param code
     * @param session
     * @return
     */
    public String Wxlogin(String code,HttpSession session) {
        try {
            String re=Https.wxLoginApi(code);
            JSONObject jsonObject= JSON.parseObject(re);
            String openid=jsonObject.getString("openid");
            User where=new User();
            where.setUserWxid(openid);
            User user=sqlSession.selectOne("findOneUserByEverything",where);
            if(user==null){
                return new CodeEntity(5000,"未查询到你的微信，也许你为绑定微信！！！").toJSONString();
            }else {
                session.setAttribute("user",user);
                CodeEntity codeEntity=new CodeEntity(200,"OK");
                JSONObject data=new JSONObject();
                data.put("sessionId",session.getId());
                data.put("userName",user.getUserName());
                data.put("userNumber",user.getUserNumber());
                codeEntity.setData(data);
                return codeEntity.toJSONString();
            }
        } catch (IOException e) {
            e.printStackTrace();
            return new CodeEntity(5000,"服务器异常").toJSONString();
        }
    }

    /**
     * 绑定微信
     * @param code
     * @param userNumber
     * @param userName
     * @return
     */
    public  String bindWx(String code,String userNumber,String userName){
        try {
            String re=Https.wxLoginApi(code);
            JSONObject jsonObject= JSON.parseObject(re);
            String openid=jsonObject.getString("openid");
            User user=new User();
            user.setUserName(userName);
            user.setUserNumber(userNumber);
            User reUSer=sqlSession.selectOne("findUserByUserNumberAndUserName",user);
            if(reUSer==null){
                return  new CodeEntity(5000,"输入错误！！").toJSONString();
            }else{
                if(reUSer.getUserWxid().length()>2){

                   return new CodeEntity(4009,"该学号已经绑定，不可更改。如需更改，请联系管理员！！").toJSONString();
                }
                User userM=new User();
                userM.setUserId(reUSer.getUserId());
                userM.setUserWxid(openid);
                int cout=sqlSession.update("updateUserUserWxidByUserId",userM);
                sqlSession.commit();
                return  new CodeEntity(200,"绑定成功！！").toJSONString();
            }

        } catch (IOException e) {
            e.printStackTrace();
            return new CodeEntity(5000,"服务器异常").toJSONString();
        }
    }

    /**
     *  后台扫码登录
     * @param code
     * @param session
     * @return
     */
    public String WxBackLogin(String code, HttpSession session) {
        return Wxlogin(code, session);
    }





    /**
     * 删除用户
     * @param userids
     * @return
     */
    public String deleteUser(int[] userids) {
        for (int i:userids){
             sqlSession.update("deleteUser", i);
        }
            sqlSession.commit();
            return new CodeEntity(200, "ok").toString();

    }







    /**
     *  查询所有学生(int Page ,int PageSize)
     * @param Page    当前页码
     * @param PageSize   一页显示记录数
     * @return
     */
    public  String  findAllUserByStu(int Page ,int PageSize){

//      PageHelper分页插件 传入当前页码和一页显示记录数
        PageHelper.startPage(Page, PageSize);

//      根据分页插件 自行查询出当前页内容
        List<User> lists = sqlSession.selectList("findAllUserByStu");
        System.out.println("----lists:"+lists);

        return new Crud<User>().selectMany(lists);


    }

    /**
     * 查询所有老师
     * @param Page
     * @param PageSize
     * @return
     */
    public  String  findAllUserByTea(int Page ,int PageSize){

//      PageHelper分页插件 传入当前页码和一页显示记录数
        PageHelper.startPage(Page, PageSize);

//      根据分页插件 自行查询出当前页内容
        List<User> lists = sqlSession.selectList("findAllUserByTea");
        System.out.println("----lists:"+lists);
//        return sl(lists);
        return new Crud<User>().selectMany(lists);

    }

    /**
     * 查询所有教师 返回值无记录数
     * @return
     */
    public  String  findAllUserByTeaNoPage(){
        JSONArray userJSONArray = new JSONArray(sqlSession.selectList("findAllUserByTea"));
       return new Crud<JSONArray>().selectNoPage(userJSONArray);
    }
    public String findAllUserByFudaoyuanNoPage() {
        JSONArray userJSONArray = new JSONArray(sqlSession.selectList("findAllUserByFudaoyuan"));
        return new Crud<JSONArray>().selectNoPage(userJSONArray);
    }
    /**
     * 暂时不用
     * @param Everything
     * @return
     */
    public String findOneUser(User Everything){
        JSONArray userJSONArray = new JSONArray(sqlSession.selectOne("findOneUserByEverything",Everything));
//        return  ps(userJSONArray);
        return  new Crud<JSONArray>().selectNoPage(userJSONArray);
    }


    /**
     * 通过用户id查询一个学生
     * @param userId
     * @return
     */
    public String findOneUserByStuUserId(int userId){
        JSONArray userJSONArray = new JSONArray(sqlSession.selectOne("findOneUserByStuUserId",userId));
        return  new Crud<JSONArray>().selectNoPage(userJSONArray);

    }

    /**
     * 通过用户id查询一个教师
     * @param userId
     * @return
     */
    public String findOneUserByTeaUserId(int userId){
        JSONArray userJSONArray = new JSONArray(sqlSession.selectOne("findOneUserByTeaUserId",userId));
        return  new Crud<JSONArray>().selectNoPage(userJSONArray);

    }

    /**
     * 根据用户id或姓名查询记录
     * @param Page
     * @param PageSize
     * @return
     */
    public  String  searchUser(int Page ,int PageSize,User user){

//      PageHelper分页插件 传入当前页码和一页显示记录数
        PageHelper.startPage(Page, PageSize);

//      根据分页插件 自行查询出当前页内容
        List<User> lists = sqlSession.selectList("searchUser",user);
        System.out.println("----lists:"+lists);
//        return sl(lists);
        return new Crud<User>().selectMany(lists);


    }



    /**
     * 根据usertype查询一条记录
     * @param userType
     * @return
     */
    public String findOneUserByUserType(int userType){
        JSONArray userJSONArray = new JSONArray(sqlSession.selectOne("findOneUserByUserType",userType));
        return  new Crud<JSONArray>().selectNoPage(userJSONArray);
    }


    /**
     * 根据用户id修改记录
     * @param user
     * @return
     */
    public String updateUser(User user){
        int isOk =  sqlSession.update("updateUser",user);
        sqlSession.commit();
            return new Crud<>().isOk(isOk);
    }


    /**
     * 根据userId修改UserType
     * @param user
     * @return
     */
    public String updateUserTypeByUserId(User user){
        int isOk =  sqlSession.update("updateUserTypeByUserId",user);
        sqlSession.commit();
        return new Crud<>().isOk(isOk);

    }


    /**
     * 添加一个学生
     * @param user
     * @return
     */
    public String addStuUser(User user){
        int isOk = sqlSession.insert("addStuUser",user);
        sqlSession.commit();
        return new Crud<>().isOk(isOk);
    }

    /**
     * 添加一个教师
     * @param user
     * @return
     */
    public String addTeaUser(User user){
        int isOk = sqlSession.insert("addTeaUser",user);
        sqlSession.commit();
        return new Crud<>().isOk(isOk);
    }



}
